package com.cy.ppj.service.product;

import java.util.List;

import com.cy.ppj.model.PageBean;
import com.cy.ppj.model.ao.product.ProductTypeTagAO;
import com.cy.ppj.model.ao.product.TagAddAO;
import com.cy.ppj.model.ao.product.TagEditAO;
import com.cy.ppj.model.domian.product.Tag;
import com.cy.ppj.model.enums.TagStatus;
import com.cy.ppj.model.query.TagAdminQuery;
import com.cy.ppj.model.vo.ProductTypeTagsVO;
import com.cy.ppj.model.vo.TagDetailAdminVO;

/**
 * 标签管理service
 * @author: tanyilin
 * @create: 2018年8月4日 下午2:34:33
 */
public interface TagService {

	/**
     * 新增标签
     * @param tagAddAO
     */
    void addTag(TagAddAO tagAddAO);
    
    /**
     * 修改标签的状态
     * @param tagId
     * @param status
     */
    void updateTagStatus(Long tagId, TagStatus status);
    
    /**
     * 删除标签
     * @param id
     */
    void deleteTag(Long id);
    
    /**
     * 编辑更新标签
     * @param tagEditAO
     */
    void updateTag(TagEditAO tagEditAO);

    /**
     * 后台查询标签信息详情
     * @param tagId
     * @return
     */
    TagDetailAdminVO selectTagDetailAdmin(Long tagId);
    
    /**
     * 后台标签列表
     * @param productTagQuery
     * @return
     */
    PageBean<Tag> adminTags(TagAdminQuery tagAdminQuery);
    
    /**
     * 根据产品类型查找标签，有缓存
     * @param typeId
     * @return
     */
    List<Tag> getTagsByTypeIdInCache(Long typeId);
    
    /**
     * 所有标签列表,有缓存
     * @return
     */
    List<Tag> allTagsInCache();
    
    /**
     * 查询所有的产品类型，以及相应的标签
     * @return
     */
    List<ProductTypeTagsVO> queryAllProductTypeTagsInCache();
    
    /**
     * 为产品类型添加标签
     * @param productTypeTagAO
     */
    void addTypeTags(ProductTypeTagAO productTypeTagAO);
}
